#include "searchselect.h"
#include "ui_searchselect.h"
#include <QJsonDocument>
#include <QMessageBox>
#include<music.h>
SearchSelect::SearchSelect(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::SearchSelect)
{
    ui->setupUi(this);
    //创建一个网络访问管理对象
    manager = new QNetworkAccessManager(this);
    //把网络访问完成的信号和槽函数绑定，信号的参数就是网页的响应（也就是网站返回给你的内容）
    connect(manager, SIGNAL(finished(QNetworkReply*)),
            this, SLOT(replyFinished(QNetworkReply*)));

    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"歌名"<<"歌手"<<"专辑"<<"时长"<<"收藏");

    player = new QMediaPlayer;//定义一个媒体播放器
    audioOutput = new QAudioOutput;//定义一个音频输出对象
    player->setAudioOutput(audioOutput);//把音频输出对象设置为媒体播放器的音频输出工具

    audioOutput->setVolume(100);
    playIndex = -1;//默认没有播放歌曲
}


SearchSelect::~SearchSelect()
{
    delete ui;
}



void SearchSelect::replyFinished(QNetworkReply *reply)
{
    QVariant ret = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if(ret == 200)
    {
        QByteArray bytearr = reply->readAll();//读取网页返回的所有数据
        QJsonDocument jsonDoc = QJsonDocument::fromJson(bytearr);
        if(jsonDoc.isObject())//判断文档是否是一个JSON对象，因为在网页上显示的时候它是对一个对象，这里是看自己的代码访问是否出错
        {
            QJsonObject objRoot = jsonDoc.object();//获得文档对象
            if(objRoot.contains("result"))//看对象里面是否包含一个叫做result的key
            {
                QJsonValue val = objRoot.value("result");//获取key为resualt的json的结果
                if(val.isObject())//看看结果是不是一个JSON对象
                {
                    QJsonObject songsObj = val.toObject();//把结果转为QObject
                    if(songsObj.contains("songs"))
                    {
                        val = songsObj.value("songs");//获取key为result的json的结果
                        if(val.isArray())//判断结果是否是一个数组
                        {
                            QJsonArray songArr = val.toArray();//把结果转为json数组
                            for(int j = 0 ; j < songArr.size() ; j++)
                            {
                                musicInfo info;//定义一个歌曲结构体，准备收集所需要的歌曲信息
                                if(songArr[j].isObject())//判断第j个元素是不是一个对象
                                {
                                    QJsonObject arrElm = songArr[j].toObject();//把下标为j的元素转为对象
                                    if(arrElm.contains("id"))//歌曲id
                                    {
                                        QJsonValue val = arrElm.value("id");//获得key为id的项的值
                                        info.id = val.toInt();//把值转为整数
                                        qDebug()<<info.id;
                                    }
                                    if(arrElm.contains("name"))//歌名
                                    {
                                        QJsonValue val = arrElm.value("name");//获得key为name的项的值
                                        info.musicName = val.toString();//把值转为字符串
                                        qDebug()<<info.musicName;
                                    }
                                    if(arrElm.contains("artists"))//作者
                                    {
                                        QJsonValue val = arrElm.value("artists");//获得key为artists的项的值
                                        if(val.isArray())
                                        {
                                            QJsonArray arr = val.toArray();
                                            for(int i = 0 ; i < arr.size() ; i++)
                                            {
                                                QJsonObject artiatsObj = arr[i].toObject();
                                                if(artiatsObj.contains("name"))
                                                {
                                                    QJsonValue artiatsValue = artiatsObj.value("name");//得到歌手名
                                                    qDebug()<<artiatsValue.toString();
                                                    info.artists.append(artiatsValue.toString());//把歌手名存入到歌手链表中
                                                }
                                            }
                                        }
                                    }
                                    if(arrElm.contains("album"))//专辑名
                                    {
                                        QJsonValue val = arrElm.value("album");//获得key为album的项的值
                                        QJsonObject albumObj = val.toObject();//把值转为JSON对象
                                        QJsonValue valName = albumObj.value("name");//得到专辑名
                                        info.albumName = valName.toString();//把结果转为字符串
                                        qDebug()<<info.albumName;
                                    }
                                    if(arrElm.contains("duration"))//专辑名
                                    {
                                        QJsonValue val = arrElm.value("duration");//获得key为duration的项的值
                                        info.duration = val.toDouble();//把时长转为double类型
                                        qDebug()<<info.duration;
                                    }
                                }


                                QTableWidgetItem * pItem1 = new QTableWidgetItem(info.musicName);
                                QString artistsName;
                                for(QString name : info.artists)//遍历歌手名链表
                                {
                                    artistsName+=name;//把链表中的名字加入到一个字符串中
                                    artistsName+=" ";//每个名字之间用空格隔开
                                }
                                QTableWidgetItem * pItem2 = new QTableWidgetItem(artistsName);//把歌手名添加到选项中
                                QTableWidgetItem * pItem3 = new QTableWidgetItem(info.albumName);//把专辑名添加到选项中

                                int mins = info.duration/1000/60;
                                int scen = info.duration/1000%60;
                                QString duration = QString("%1:%2").arg(mins).arg(scen);
                                QTableWidgetItem * pItem4 = new QTableWidgetItem(duration);//把专辑名添加到选项中
                                QTableWidgetItem * pItem5 = new QTableWidgetItem("收藏");//把专辑名添加到选项中
                                //这里是把数组的元素数量作为表格的下标，因为数组中的元素数量和表格的元素是对应的
                                ui->tableWidget->setItem(vMusicInfo.size(),0,pItem1);
                                ui->tableWidget->setItem(vMusicInfo.size(),1,pItem2);
                                ui->tableWidget->setItem(vMusicInfo.size(),2,pItem3);
                                ui->tableWidget->setItem(vMusicInfo.size(),3,pItem4);
                                ui->tableWidget->setItem(vMusicInfo.size(),4,pItem5);
                                vMusicInfo.append(info);//把带有歌曲关键信息的结构体存入到动态数组中
                            }
                        }
                    }
                }
            }
        }
    }
    else
    {
        QMessageBox::about(NULL,"提示","网页访问出错");
    }
}


//双击某一行
void SearchSelect::on_tableWidget_cellDoubleClicked(int row, int column)
{
    playIndex = row;
    qDebug()<<vMusicInfo[row].id;
    QString url = QString("http://music.163.com/song/media/outer/url?id=%1.mp3").arg(vMusicInfo[playIndex].id);
    qDebug()<<url;
    player->setSource(QUrl(url));//媒体播放器设置音频来源
    player->play();

}






void SearchSelect::on_tableWidget_cellClicked(int row, int column)
{
    if(column==5)
    {

    }
}

